import { exec } from 'node:child_process'
import fs from 'node:fs'
import path from 'node:path'

// 源文件和目标文件路径
const sourceFiles = [
  `src/server/api.ts`,
  `src/utils/mdrender.ts`,
  `src/config/theme.ts`,
]

// 简单编译函数
function compileFile(srcPath) {
  const filename = path.basename(srcPath)
  const dirname = path.dirname(srcPath)
  const destPath = path.join(dirname, filename.replace(`.ts`, `.js`))

  // 读取源文件
  const content = fs.readFileSync(srcPath, `utf8`)

  // 简单替换 TypeScript 语法
  let jsContent = content
    .replace(/import\s+type\s+(?:\S.*?)??;?\n/g, ``) // 移除类型导入
    .replace(/:\s*(.*?)\s*=>/g, ` =>`) // 移除函数返回类型
    .replace(/:\s*(.*?)\s*=/g, ` =`) // 移除变量类型
    .replace(/<.*?>/g, ``) // 移除泛型声明
    .replace(/export\s+interface\s+(?:\S.*?)??\{[\s\S]*?\}\n/g, ``) // 移除接口声明
    .replace(/export\s+type\s+(?:\S.*?)??;?\n/g, ``) // 移除类型导出

  // 导入路径处理
  jsContent = jsContent.replace(/from\s+['"](.*)['"];?/g, (match, p1) => {
    if (p1.startsWith(`@/`)) {
      // 处理别名导入
      const newPath = p1.replace(`@/`, `../`)
      return `from '${newPath}.js';`
    }
    return `from '${p1}';`
  })

  // 写入目标文件
  fs.writeFileSync(destPath, jsContent)
  console.log(`已编译 ${srcPath} => ${destPath}`)
}

// 编译所有文件
sourceFiles.forEach(compileFile)
console.log(`编译完成，可以使用 npm run api 启动服务器了`)
